package com.atguigu.gmall.product.service.impl;

import com.atguigu.gmall.model.product.BaseCategory1;
import com.atguigu.gmall.product.mapper.BaseCategory1Mapper;
import com.atguigu.gmall.product.service.BaseCategory1Service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author 搭忆长安
 * @version 1.0
 * @date 2021年06月25日 19:48
 * @ClassName:BaseCategory1ServiceImpl
 * @Description: TODO
 */
@Service
public class BaseCategory1ServiceImpl extends ServiceImpl<BaseCategory1Mapper, BaseCategory1>implements BaseCategory1Service {

    /**
     * 条件查询
     * @param baseCategory1
     * @return
     */
    @Override
    public List<BaseCategory1> search(BaseCategory1 baseCategory1) {
        //参数校验
        if(baseCategory1 == null){
            //如果什么条件都没有传的情况下,查询所有的一级分类的信息
            return list(null);
        }
        //构建查询条件
        LambdaQueryWrapper<BaseCategory1> wrapper = getWrapper(baseCategory1);
        //执行查询,获取结果
        List<BaseCategory1> list = list(wrapper);
        //返回结果
        return list;
    }

    /**
     * 分页查询
     * @param page
     * @param size
     * @return
     */
    @Override
    public List<BaseCategory1> pageSearch(Integer page, Integer size) {
        //分页查询page
        IPage<BaseCategory1> pageInfo = page(new Page<>(page, size), null);
        return pageInfo.getRecords();
    }

    /**
     * 条件分页查询
     * @param baseCategory1
     * @param page
     * @param size
     * @return
     */
    @Override
    public List<BaseCategory1> search(BaseCategory1 baseCategory1, Integer page, Integer size) {
        //构建查询条件
        LambdaQueryWrapper<BaseCategory1> wrapper = getWrapper(baseCategory1);
        //分页查询
        IPage<BaseCategory1> pageInfo = page(new Page<>(page, size), wrapper);
        //返回查询结果
        return pageInfo.getRecords();
    }

    private LambdaQueryWrapper getWrapper(BaseCategory1 baseCategory1){
        //构建查询条件的构造器
        LambdaQueryWrapper<BaseCategory1> wrapper = new LambdaQueryWrapper<>();
        //判断id是否为空,若不为空,数据库中的id的值等于当前传递的值
        if(baseCategory1.getId() != null){
            wrapper.eq(BaseCategory1::getId, baseCategory1.getId());
        }
        //判断name是否为空,若name不为空,数据库中的name的值需要like当前传递的值
        if(StringUtils.isNotEmpty(baseCategory1.getName())){
            wrapper.like(BaseCategory1::getName, baseCategory1.getName());
        }
        return wrapper;
    }
}
